<?xml version="1.0" encoding="UTF-8"?>
<html
    xmlns:ft="https://github.com/OpenType/fonttest"
    xmlns:xlink="http://www.w3.org/1999/xlink">
<head>
  <meta charset="UTF-8"/>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Vollkorn|Vollkorn:i"/>
  <link rel="stylesheet" href="style.css"/>
</head>
<body>
<h3 id="MORX-8">MORX–8: Rearrangement State Machine</h3>

<div class="desc">
  The <a href="../fonts/TestMORXEight.ttf">font</a> for this test case has
  an <a href="https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6morx.html"
  >AAT Extended Glyph Metamorphosis Table</a>
  with a single <em>Rearrangement Subtable</em>. Its finite-state machine
  contains three states (0, 1, 2) and the following transitions:
</div>

<ul class="desc">
  <li>For glyph <em>0</em>, the machine enters state 0.</li>
  <li>For glyph <em>1</em>, the machine enters state 1.</li>
  <li>For glyph <em>2</em>, the machine enters state 2.</li>

  <li>For glyph <em>A</em>, the machine remains in its current
  state.  As a side effect, it sets both <em>start</em>
  and <em>end</em> of the <em>marked glyph sequence</em> to the current
  position.</li>

  <li>For glyph <em>B</em>, the machine remains in its current
  state.  As a side effect, it changes the <em>end</em> of the
  <em>marked glyph sequence</em> to the current position.</li>

  <li>For glyph <em>C</em>, the machine remains in its current
  state.  As a side effect, the machine changes the <em>end</em> of
  the <em>marked glyph sequence</em> to the current position.  In
  addition, it executes one of the following rearrangement
  actions:</li>

  <ul class="desc">
    <li>In state 0, a rearrangement of type 0. This is a no-op, so
    the <em>marked glyph sequence</em> remains unchanged.</li>

    <li>In state 1, a rearrangement of type 1. This moves the first
    marked glyph to the back, so “ABC” gets rewritten to “BCA”.</li>

    <li>In state 2, a rearrangement of type 2. This moves the last
    marked glyph to the front, so “ABC” gets rewritten to “CAB”.</li>
  </ul>
</ul>

<div class="desc">
  If your rendering system correctly implements <em>Apple Advanced
  Typography,</em> the string “0ABC” should get rendered in the
  original ordering, whereas “1ABC” and “2ABC” should get re-arranged
  in a state-dependent way.
</div>

<div class="desc">
  See also <a href="https://github.com/HOST-Oman/libraqm/issues/95">libraqm
  bug 95</a> and <a href="https://github.com/harfbuzz/harfbuzz/issues/1190">HarfBuzz
  bug 1190</a>.
</div>

<table>
  <tr>
    <th>Expected</th>
    <td class="expected" ft:id="MORX-8/0" ft:render="0ABC"
        ft:font="TestMORXEight.ttf"><svg version="1.1" viewBox="0 -200 2834 1200"><symbol id="MORX-8/0.zero" overflow="visible"><path d="M212,0 Q100,0 100,113 L100,601 Q100,714 212,714 L701,714 Q814,714 814,601 L814,113 Q814,0 701,0 Z M701,40 Q741,40 757,56 Q774,73 774,113 L774,601 Q774,641 757,657 Q741,674 701,674 L212,674 Q173,674 156,657 Q140,641 140,601 L140,113 Q140,73 156,56 Q173,40 212,40 Z M457,135 Q380,135 341,192 Q302,249 302,358 Q302,579 457,579 Q534,579 573,522 Q613,466 613,358 Q613,135 457,135 Z M456,198 Q499,198 519,237 Q540,277 540,358 Q540,439 519,478 Q499,517 456,517 Q413,517 393,478 Q374,439 374,357 Q374,276 393,237 Q413,198 456,198 Z" /></symbol><symbol id="MORX-8/0.A" overflow="visible"><path d="M459,221 L176,221 L91,0 L0,0 L279,717 L360,717 L638,0 L545,0 Z M352,517 Q345,537 335,568 Q325,599 318,624 Q303,564 287,517 L206,301 L432,301 Z" /></symbol><symbol id="MORX-8/0.B" overflow="visible"><path d="M301,714 Q439,714 505,673 Q572,632 572,537 Q572,474 537,432 Q502,391 436,379 L436,374 Q596,347 596,203 Q596,106 530,53 Q464,0 348,0 L97,0 L97,714 Z M319,410 Q407,410 443,438 Q479,467 479,527 Q479,585 437,611 Q396,637 305,637 L187,637 L187,410 Z M187,76 L331,76 Q421,76 460,111 Q500,146 500,210 Q500,270 459,302 Q418,335 324,335 L187,335 Z" /></symbol><symbol id="MORX-8/0.C" overflow="visible"><path d="M403,645 Q288,645 222,568 Q156,491 156,357 Q156,221 218,145 Q281,69 402,69 Q479,69 573,97 L573,19 Q533,4 490,-3 Q447,-10 389,-10 Q228,-10 144,87 Q61,185 61,358 Q61,467 101,549 Q141,632 218,678 Q296,724 404,724 Q459,724 509,713 Q560,702 601,682 L565,606 Q479,645 403,645 Z" /></symbol><use x="0" y="0" xlink:href="#MORX-8/0.zero" /><use x="914" y="0" xlink:href="#MORX-8/0.A" /><use x="1552" y="0" xlink:href="#MORX-8/0.B" /><use x="2202" y="0" xlink:href="#MORX-8/0.C" /></svg></td>

    <td class="expected" ft:id="MORX-8/1" ft:render="1ABC"
        ft:font="TestMORXEight.ttf"><svg version="1.1" viewBox="0 -200 2834 1200"><symbol id="MORX-8/1.one" overflow="visible"><path d="M212,0 Q100,0 100,113 L100,601 Q100,714 212,714 L701,714 Q814,714 814,601 L814,113 Q814,0 701,0 Z M701,40 Q741,40 757,56 Q774,73 774,113 L774,601 Q774,641 757,657 Q741,674 701,674 L212,674 Q173,674 156,657 Q140,641 140,601 L140,113 Q140,73 156,56 Q173,40 212,40 Z M519,143 L448,143 L448,419 Q448,452 452,508 Q425,483 405,469 L351,430 L316,479 L446,571 L519,571 Z" /></symbol><symbol id="MORX-8/1.B" overflow="visible"><path d="M301,714 Q439,714 505,673 Q572,632 572,537 Q572,474 537,432 Q502,391 436,379 L436,374 Q596,347 596,203 Q596,106 530,53 Q464,0 348,0 L97,0 L97,714 Z M319,410 Q407,410 443,438 Q479,467 479,527 Q479,585 437,611 Q396,637 305,637 L187,637 L187,410 Z M187,76 L331,76 Q421,76 460,111 Q500,146 500,210 Q500,270 459,302 Q418,335 324,335 L187,335 Z" /></symbol><symbol id="MORX-8/1.C" overflow="visible"><path d="M403,645 Q288,645 222,568 Q156,491 156,357 Q156,221 218,145 Q281,69 402,69 Q479,69 573,97 L573,19 Q533,4 490,-3 Q447,-10 389,-10 Q228,-10 144,87 Q61,185 61,358 Q61,467 101,549 Q141,632 218,678 Q296,724 404,724 Q459,724 509,713 Q560,702 601,682 L565,606 Q479,645 403,645 Z" /></symbol><symbol id="MORX-8/1.A" overflow="visible"><path d="M459,221 L176,221 L91,0 L0,0 L279,717 L360,717 L638,0 L545,0 Z M352,517 Q345,537 335,568 Q325,599 318,624 Q303,564 287,517 L206,301 L432,301 Z" /></symbol><use x="0" y="0" xlink:href="#MORX-8/1.one" /><use x="914" y="0" xlink:href="#MORX-8/1.B" /><use x="1564" y="0" xlink:href="#MORX-8/1.C" /><use x="2196" y="0" xlink:href="#MORX-8/1.A" /></svg></td>

    <td class="expected" ft:id="MORX-8/2" ft:render="2ABC"
        ft:font="TestMORXEight.ttf"><svg version="1.1" viewBox="0 -200 2834 1200"><symbol id="MORX-8/2.two" overflow="visible"><path d="M212,0 Q100,0 100,113 L100,601 Q100,714 212,714 L701,714 Q814,714 814,601 L814,113 Q814,0 701,0 Z M701,40 Q741,40 757,56 Q774,73 774,113 L774,601 Q774,641 757,657 Q741,674 701,674 L212,674 Q173,674 156,657 Q140,641 140,601 L140,113 Q140,73 156,56 Q173,40 212,40 Z M314,130 L314,184 L429,296 Q471,336 491,360 Q511,384 518,403 Q526,422 526,445 Q526,476 508,492 Q490,509 459,509 Q431,509 406,498 Q382,487 354,466 L319,512 Q384,567 460,567 Q524,567 560,535 Q597,504 597,449 Q597,403 571,366 Q545,329 482,269 L401,192 L596,192 L596,130 Z" /></symbol><symbol id="MORX-8/2.C" overflow="visible"><path d="M403,645 Q288,645 222,568 Q156,491 156,357 Q156,221 218,145 Q281,69 402,69 Q479,69 573,97 L573,19 Q533,4 490,-3 Q447,-10 389,-10 Q228,-10 144,87 Q61,185 61,358 Q61,467 101,549 Q141,632 218,678 Q296,724 404,724 Q459,724 509,713 Q560,702 601,682 L565,606 Q479,645 403,645 Z" /></symbol><symbol id="MORX-8/2.A" overflow="visible"><path d="M459,221 L176,221 L91,0 L0,0 L279,717 L360,717 L638,0 L545,0 Z M352,517 Q345,537 335,568 Q325,599 318,624 Q303,564 287,517 L206,301 L432,301 Z" /></symbol><symbol id="MORX-8/2.B" overflow="visible"><path d="M301,714 Q439,714 505,673 Q572,632 572,537 Q572,474 537,432 Q502,391 436,379 L436,374 Q596,347 596,203 Q596,106 530,53 Q464,0 348,0 L97,0 L97,714 Z M319,410 Q407,410 443,438 Q479,467 479,527 Q479,585 437,611 Q396,637 305,637 L187,637 L187,410 Z M187,76 L331,76 Q421,76 460,111 Q500,146 500,210 Q500,270 459,302 Q418,335 324,335 L187,335 Z" /></symbol><use x="0" y="0" xlink:href="#MORX-8/2.two" /><use x="914" y="0" xlink:href="#MORX-8/2.C" /><use x="1546" y="0" xlink:href="#MORX-8/2.A" /><use x="2184" y="0" xlink:href="#MORX-8/2.B" /></svg></td>

  </tr>
  <tr>
    <th>Observed</th>
    <td class="observed" ft:id="MORX-8/0"/>
    <td class="observed" ft:id="MORX-8/1"/>
    <td class="observed" ft:id="MORX-8/2"/>
  </tr>
  <tr>
    <th class="conformance-header">Conformance</th>
    <td class="conformance" ft:id="MORX-8/0"/>
    <td class="conformance" ft:id="MORX-8/1"/>
    <td class="conformance" ft:id="MORX-8/2"/>
  </tr>
</table>
</body>
</html>
